#include <iostream>
using namespace std;

int main(int argc, const char *argv[]){
    int a = 10;
    int &r = a; // 引用r引用的目标是a
    // 相当于给变量a起了一个别名 叫做 r
    cout << "a:" << a << " " << "r:" << r << endl; // 10 10
    cout << "&a:" << &a << " " << "&r:" << &r << endl; // 一样的

    a = 20;
    cout << "a:" << a << " " << "r:" << r << endl; // 20 20
    r = 30;
    cout << "a:" << a << " " << "r:" << r << endl; // 30 30

    // 引用必须要初始化 否则报错
    // int &r2; // 报错

    // 引用的目标一旦确定了，后面就不能再修改引用的目标了
    int b = 40;
    r = b; // 这种写法并不是修改了引用的目标 而是用b的值赋值给r
    cout << "a:" << a << " " << "r:" << r << endl; // 40 40
    cout << "&a:" << &a << " " << "&r:" << &r << endl; // 一样的
    cout << "&b:" << &b << endl; // 和上面不一样
    return 0;
}